/*
 * Proyecto Manejador de Proyectos
 * @Autor Hector Hurtado
 */
package Mproyectos.controladores;

import Mproyectos.entidades.Usuario;
import Mproyectos.modelo.FachadaUsuario;
import java.util.Collection;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * Controla el CRUD del Usuario
 */
@ManagedBean(name = "controladorUsuario")
@SessionScoped
public class ControladorUsuario {

    /**
     * Usuario en creacion o actualizacion
     */
    private Usuario usuario;
    /**
     * Fachada de acceso a los datos
     */
    @EJB
    private FachadaUsuario fachadaUsuario;

    /**
     * Constructor vacio
     */
    public ControladorUsuario() {
    }

    /**
     * Devuelve el usuario en creacion o edicion
     *
     * @return usuario a crear o actualizar
     */
    public Usuario getUsuario() {

        // Si el usuario esta vacio crear uno 
        if (usuario == null) {
            usuario = new Usuario();
        }

        // Retorna el usuario actual
        return usuario;
    }

    /**
     * Actualiza el usuario en edicion o creacion
     *
     * @param usuario actual
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * Devuelve todos los usuarios registrados en el sistema
     *
     * @return Lista de usuarios
     */
    public Collection<Usuario> getUsuarios() {
        return fachadaUsuario.listar();
    }

    /**
     * Adiciona a la unidad de persistencia el usuario actual
     *
     * @return Nombre de la pagina despues de crear
     */
    public String crear() {
        // Adiciona el usuario 
        fachadaUsuario.adicionar(getUsuario());

        // Se va para la pagina de listar usuario 
        return "listar";
    }

    /**
     * Elimina el usuario especificado y retorna a la lista
     *
     * @param usuario a eliminar
     * @return Pagina a la quer se devuelve
     */
    public String eliminar(Usuario usuario) {
        fachadaUsuario.eliminar(usuario);
        return "listar";
    }

    /**
     * Asigna el usuario especificado como el usuario actual y llama a la pagina
     * de actualizar
     *
     * @param usuario a actualizar
     * @return devuelve a la pagina de actualizacion
     */
    public String prepararActualizar(Usuario usuario) {
        // Asigna el usuario seleccionado desde la lista como  el actual 
        this.usuario = usuario;
        return "actualizar";
    }

    /**
     * Actualiza los datos del usuario actual
     *
     * @return devuelve a la lista
     */
    public String actualizar() {
        fachadaUsuario.actualizar(usuario);
        return "listar";
    }

    /**
     * Retorna la fachada de los usuarios
     *
     * @return fachada de los usuarios
     */
    public FachadaUsuario getFachadaUsuario() {
        return fachadaUsuario;
    }
}